#include <cstdio>
#include <algorithm>
#include <cstring>
#define _cle(x,a) memset(x,a,sizeof(x));
#define bug printf("bug\n");
using namespace std;
const int N=100050;
struct node{
    int l;
    int r;
    int v;
    int f;
}tr[N<<2];
void build(int rt,int l,int r){
    tr[rt].l=l;
    tr[rt].r=r;
    //多组数据 重新建树要清楚懒惰标记
    tr[rt].f=0;
    if(tr[rt].l==tr[rt].r){
        tr[rt].v=1;
        return;
    }
    int m=(l+r)>>1;
    build(rt<<1,l,m);
    build(rt<<1|1,m+1,r);
    tr[rt].v=tr[rt<<1].v+tr[rt<<1|1].v;
}
void pushdown(int rt){
    tr[rt<<1].f=tr[rt].f;
    tr[rt<<1|1].f=tr[rt].f;
    tr[rt<<1].v=tr[rt].f*(tr[rt<<1].r-tr[rt<<1].l+1);
    tr[rt<<1|1].v=tr[rt].f*(tr[rt<<1|1].r-tr[rt<<1|1].l+1);
    tr[rt].f=0;
}
void update(int rt,int a,int b,int c){
    if(tr[rt].l>b || tr[rt].r<a){
        return;
    }
    if(tr[rt].l>=a && tr[rt].r<=b){
        tr[rt].v=(tr[rt].r-tr[rt].l+1)*c;
        tr[rt].f=c;
        return;
    }
    if(tr[rt].f){
        pushdown(rt);
    }
    int m=(tr[rt].l+tr[rt].r)>>1;
    if(a<=m){
        update(rt<<1,a,b,c);
    }
    if(b>m){
        update(rt<<1|1,a,b,c);
    }
    tr[rt].v=tr[rt<<1].v+tr[rt<<1|1].v;
}
int main(void){
    int t,n,q;
    int a,b,c;
    int cas=1;
    scanf("%d",&t);
    while(t--){
        scanf("%d",&n);
        build(1,1,n);
        scanf("%d",&q);
        while(q--){
            scanf("%d%d%d",&a,&b,&c);
            update(1,a,b,c);
        }
        printf("Case %d: The total value of the hook is %d.\n",cas++,tr[1].v);
    }
    return 0;
}
